package com.example.spring.bean.load08lifecycle.interfaceImpl;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * <p>
 * <p>
 */
public class LCTest2 {

    public static void main(String[] args) {
        /**
         * 跟进去refresh()方法，创建bean的时候，走以下过程：
         *  createBeanInstance(beanName, mbd, args)；(完成bean创建)
         *  populateBean(beanName, mbd, instanceWrapper); 给bean进行属性赋值
         *  initializeBean() //初始化Bean方法内容如下,后置处理器对init方法的前后处理
         *  {
         *      applyBeanPostProcessorsBeforeInitialization(wrappedBean, beanName);
         *      invokeInitMethods(beanName, wrappedBean, mbd) //执行自定义初始化
         *      applyBeanPostProcessorsAfterInitialization(wrappedBean, beanName)
         *  }
         * 从以上分析不难发现,bean的生命周期为： bean的创建, 初始化, 当容器关闭时对单实例的bean进行销毁.
         */
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(InitConfig.class);

        context.getBean("car");

        context.close();

        //initializing car...
        //destroying car...
    }
}
